/**
 * @description 发起网络请求
 * @param {string} url 请求地址 必填
 * @param {string} method 请求方式 默认 GET / POST / PUT / DELETE
 * @param {string} data 传递参数
 * @param {string} timeout 超时时间，单位 ms 默认 3000
 * @param {string} dataType 返回的数据格式 默认 json
 * @param {Boolean} sslVerify 验证 ssl 证书 默认 true
 * @param {object} header 设置请求的
 * @param {string} loadingText 请求提示加载中
 * header['content-type'] = application/json
 * header['content-type'] = application/x-www-form-urlencoded
 */
import env from './env.js';

export const request = (url, obj = {}) => {
	// 请求参数
	let params = {
		url: url,
		method: obj.method || 'get',
		data: '',
		timeout: 10000,
		dataType: 'json',
		sslVerify: true,
		header: obj.header || {}
	}
	delete obj.header

	if (typeof(url) == 'object') {
		params.url = url.url
		delete url.url
		obj = url
		params = {
			...params,
			...obj
		}
		// params = obj
		// console.log(params)
	}
	if (params.url.substr(0, 7).toLowerCase() == "http://" || params.url.substr(0, 8).toLowerCase() == "https://") {
		if(typeof(url) != 'object'){ params.url = url; }
	} else {
		// 请求地址加上公共头host
		var hhost = env.API_BKS_URL;
		if (hhost) {
			params.url = hhost + params.url;
		}
	}
	// 判断参数里面有无data 有:覆盖请求参数, 无:将obj作为data数据

	if (obj.hasOwnProperty('data')) {
		params = {
			...params,
			...obj
		}
	} else {
		if (obj.hasOwnProperty('params')) {
			params.data = obj.params
		} else {
			params.data = obj
		}
	}
	// 备考生token设置
	// const bw_bks_params = JSON.parse(sessionStorage.getItem("bw_bks_params") || '{}')
	
	const bw_bks_params = uni.getStorageSync('bw_bks_params') || {}
	// console.log(bw_bks_params)
	if(bw_bks_params && bw_bks_params.access_token){
		if (typeof(bw_bks_params.access_token) != "undefined") {
			params.header.Authorization = 'Bearer ' + bw_bks_params.access_token;
		}
	}
	// 是否显示请求中文字
	if (obj.hasOwnProperty('loadingText')) {
		uni.showLoading({
			title: obj.loadingText,
			mask: false
		});
	}
	// this.$debug(JSON.stringify(params));
	// console.log('-------------', params)
	// 请求返回
	return new Promise((resolve, reject) => {
		// 请求
		uni.request({
			...params,
			success: (response) => {
				// 关闭请求中文字
				if (obj.hasOwnProperty('loadingText')) {
					uni.hideLoading();
				}
				const {
					data,
					statusCode
				} = response
				if (params.responseType) {
					resolve(response.data);
				} else {
					if (data.code == 0 || data.code == 200) {
						// 如果返回布尔值需要判断是否正确
						if (typeof(data.data) == 'boolean') {
							if (data.data) {
								resolve(response.data)
							} else {
								// 错误返回
								reject(response.data)
							}
						} else {
							resolve(response.data);
						}
					} else {
					console.log('request', params.url, response)

						let message = ''
						let code = data.code || data.status
						let msg = data.message || data.error || data.msg
						if (code == 0) {
							resolve(response.data)
						} else {
							if (code == '401006') {
								try {
									// 'bw_bks_params','bw_bks_user', 'bw_bks_student'
									uni.removeStorageSync('bw_bks_params');
									uni.removeStorageSync('bw_bks_user');
									uni.removeStorageSync('bw_bks_student');
									reject(response.data)
								} catch (e) {
									// error
								}
							} else if (code == '400405') {
								reject(response.data)
							} else if (code == '-1' && (msg == '未找到热文信息！' || msg =='未查询到会议信息')) {
								reject(response.data)
							} else {
								if(msg){
									uni.showToast({
										icon: 'none',
										title: msg,
										duration: 2000
									});
								}
								reject(response.data)
							}
						}
					}

				}
			},
			fail: (error) => {
				console.log(error)
				// 关闭请求中文字
				if (obj.hasOwnProperty('loadingText')) {
					uni.hideLoading();
				}
				// 请求结果code处理
				if (error.code) {
					uni.showToast({
						icon: 'none',
						title: '网络加载失败，请刷新页面',
						duration: 2000
					});
				} else {
					if(error){
						uni.showToast({
							icon: 'none',
							title: error,
							duration: 2000
						});
					}
				}
				// 没有网络
				// uni.navigateTo({
				// 	url: '/common/notNetwork'
				// });
				reject(error) // 返回接口返回的错误信息
			}
		});
	});
}


/**
 * @description 上传文件
 * @param {string} name 单文件名称
 * @param {boolean} sslVerify 验证 ssl 证书 默认 true
 * @param {boolean} progress 显示进度  默认 fasle
 * @param {object} header 设置请求的
 * @param {string} type 文件上传单文件和多文件区分 one / much
 * @param {object} formData 文件上传参数
 * @param {string} loadingText 请求提示加载中
 */

export const uploadFile = (url, obj = {}) => {
	let httpUrl = url
	let params = {
		header: {},
		dataType: 'json',
		...obj
	}
	if (typeof(url) == 'object') {
		httpUrl = url.url
		delete url.url
		obj = url
		params = {
			...params,
			...obj
		}
		// params = obj
		// console.log(params)
	}
	// 获取token
	if (uni.getStorageSync('bw_bks_params')) {
		let value = uni.getStorageSync('bw_bks_params')
		if (typeof(value.access_token) != "undefined") {
			params.header.Authorization = 'Bearer ' + value.access_token;
		}
	}
	console.log(httpUrl)
	
	if (httpUrl.substr(0, 7).toLowerCase() == "http://" || httpUrl.substr(0, 8).toLowerCase() == "https://") {
		httpUrl = url;
	} else {
		// 请求地址加上公共头host
		var hhost = env.API_BKS_URL;
		if (hhost) {
			httpUrl = hhost + httpUrl;
		}
	}
	console.log('uploadFile', httpUrl)
	// 返回文件上传结果
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: httpUrl, //仅为示例，非真实的接口地址
			...params,
			success: (uploadFileRes) => {
				const data = JSON.parse(uploadFileRes.data)
				console.log(data);
				resolve(data)
			},
			fail: (err) => {
				reject(err)
			}
		});
	});
}